/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.asportoonline.integration;

import java.util.List;
import javax.ejb.Local;
import org.asportoonline.entities.Cliente;
import org.asportoonline.entities.Locale;
import org.asportoonline.entities.Prenotazione;

/**
 * Interfaccia contenente le intestazioni dei metodi da sviluppare per interfacciarsi all'entità
 * persistente Prenotazione.
 * 
 * @author fe
 * @see PrenotazioneFacadeImplementation
 */
@Local
public interface PrenotazioneFacade {

    /**
     * Inserisce una nuova prenotazione.
     * 
     * @param prenotazione  
     * @see Prenotazione
     */
    void create(Prenotazione prenotazione);

    /**
     * Modifica una prenotazione esistente.
     * 
     * @param prenotazione  
     * @see Prenotazione
     */
    void edit(Prenotazione prenotazione);

    /**
     * Rimuove una prenotazione.
     * 
     * @param prenotazione  
     * @see Prenotazione
     */
    void remove(Prenotazione prenotazione);

    /**
     * Cerca una Prenotazione in base all'ID.
     * 
     * @param id ID della prenotazione.
     * @return se l'ID esiste restituisce la Prenotazione, altrimenti restituisce null.
     * @see Prenotazione
     */
    Prenotazione find(Object id);

    /**
     * Cerca tutte le Prenotazioni presenti nel database.
     * 
     * @return restituisce una lista contenente tutte le prenotazioni presenti nel database; 
     * se non ce ne sono restituisce null.
     * @see Prenotazione
     */
    List<Prenotazione> findAll();

    /**
     * Cerca tutte le Prenotazioni effettuate da un cliente.
     * 
     * @param cliente Cliente che ha effettuato la Prenotazione.
     * @return restituisce una lista contenente tutte le prenotazioni effettuate dal Cliente  cliente; 
     * se il cliente non esiste o non ha effettuato prenotazioni restituisce null.
     * @see Prenotazione
     * @see Cliente
     */
    List<Prenotazione> finAllUserPrenotations(Cliente cliente);
    
    /**
     * Cerca tutte le Prenotazioni associate ad un locale.
     * 
     * @param locale 
     * @return restituisce una lista contenente tutte le prenotazioni associate al Locale locale;
     * se il locale non esiste o non ha prenotazioni associate restituisce null.
     * @see Prenotazione
     * @see Locale
     */
    List<Prenotazione> finAllRestaurantPrenotations(Locale locale);
    
    /**
     * Cerca una Prenotazione in base all'ID.
     * 
     * @param idprenotazione  ID della prenotazione.
     * @return se l'ID esiste restituisce la Prenotazione, altrimenti restituisce null.
     * @see Prenotazione
     */
    Prenotazione find(long idprenotazione);
}
